package com.firewolf.entities.one2n_both;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class MainDriver {
	
	private EntityManagerFactory factory = null;
	private EntityManager manager = null;
	private EntityTransaction tx = null;
	
	@Before
	public void init(){
		factory = Persistence.createEntityManagerFactory("jpa");
		manager = factory.createEntityManager();
		tx = manager.getTransaction();
		tx.begin();
	}
	
	@After
	public void destory(){
		tx.commit();
		manager.close();
		factory.close();
	}
	
	/**
	 * 生成表
	 */
	@Test
	public void generateTable(){
	}
	
	/**
	 * 正常情况下，执行新增的话，不管是先增加1的一端，还是n的一端，都会产生update语句，
	 * 这是因为默认情况下两端都要维护关联关系，这样的话会影响效率
	 * 建议让1的一端放弃维护关联关系
	 * 	方法：在1的一端的@OneToMany里面设置mappedBy属性，他的值是一的一端在n的一端的属性名字，
	 * 		但是一端这样设置，就不能再设置@JoinColumn
	 */
	@Test
	public void persist(){
		Leader l = new Leader();
		l.setName("刘兴");
		
		Employee e = new Employee();
		e.setName("zhangsan");
		e.setLeader(l);
		
		Employee e2 = new Employee();
		e2.setName("lisi");
		e2.setLeader(l);
		
		Set<Employee> ss = new HashSet<>();
		ss.add(e);
		ss.add(e2);
		
		l.setEmps(ss);
		
		manager.persist(l);
		manager.persist(e);
		manager.persist(e2);
		
		
	}
	
}
